package com.ling.pl.security.service;

import com.ling.pl.core.commons.support.DaoPage;
import com.ling.pl.core.commons.utils.BatchUtils;
import com.ling.pl.core.commons.utils.reflect.ReflectUtils;
import com.ling.pl.core.dao.IDao;
import com.ling.pl.core.service.impl.BaseService;
import com.ling.pl.security.dao.DefaultUrlDao;
import com.ling.pl.security.model.DefaultUrl;
import com.ling.pl.security.model.DefaultUrlVO;

import javax.annotation.Resource;
import java.util.*;

/**
 * @author bo.wang
 */
public class BaseDefaultUrlService extends BaseService {

    public static final String BEAN_ID = "defaultUrlService";

    @Resource
    DefaultUrlDao defaultUrlDao;

    public IDao getDao() {
        return defaultUrlDao;
    }

    public List<DefaultUrlVO> convertDefaultUrlToVO(List<DefaultUrl> models) {
        List<DefaultUrlVO> result = new ArrayList<DefaultUrlVO>();
        for (DefaultUrl initiation : models) {
            DefaultUrlVO inparam = convertDefaultUrlToVO(initiation);
            result.add(inparam);
        }
        return result;
    }

    public DefaultUrlVO convertDefaultUrlToVO(DefaultUrl model) {
        DefaultUrlVO inparam = new DefaultUrlVO();
        ReflectUtils.copyProperties(model, inparam);
        return inparam;
    }

    public DefaultUrl convertDefaultUrlVOTo(DefaultUrlVO vo) {
        DefaultUrl entity = new DefaultUrl();
        ReflectUtils.copyProperties(vo, entity);
        return entity;
    }

    public List<DefaultUrl> convertDefaultUrlVOTo(List<DefaultUrlVO> vos) {
        List<DefaultUrl> result = new ArrayList<DefaultUrl>();
        for (DefaultUrlVO vo : vos) {
            DefaultUrl entity = convertDefaultUrlVOTo(vo);
            result.add(entity);
        }
        return result;
    }

    public DaoPage findDefaultUrlVOByParams(Map params, Integer pageIndex,
                                            Integer pageSize) {
        if (params == null) {
            params = new HashMap();
        }
        DaoPage daoPage = defaultUrlDao.findDefaultUrlByParams(params, pageIndex, pageSize);
        daoPage.setResult(convertDefaultUrlToVO((List<DefaultUrl>) daoPage.getResult()));
        return daoPage;
    }

    public List<DefaultUrlVO> findDefaultUrlVOByParams(Map params) {
        if (params == null) {
            params = new HashMap();
        }
        List<DefaultUrl> temp = defaultUrlDao.findDefaultUrlByParams(params);
        return convertDefaultUrlToVO(temp);
    }

    public DaoPage findDefaultUrlByParams(Map params, Integer pageIndex,
                                          Integer pageSize) {
        if (params == null) {
            params = new HashMap();
        }
        DaoPage daoPage = defaultUrlDao.findDefaultUrlByParams(params, pageIndex, pageSize);
        return daoPage;
    }

    public List<DefaultUrl> findDefaultUrlByParams(Map params) {
        if (params == null) {
            params = new HashMap();
        }
        List<DefaultUrl> temp = defaultUrlDao.findDefaultUrlByParams(params);
        return temp;
    }


    public void saveDefaultUrlDataListsMap(Map<String, List<DefaultUrlVO>> dataListsMap) {
        Collection<DefaultUrlVO> deleteList = BatchUtils.to(DefaultUrlVO.class).getDeleteEntities(dataListsMap);
        Collection<DefaultUrlVO> insertList = BatchUtils.to(DefaultUrlVO.class).getInsertEntities(dataListsMap);
        Collection<DefaultUrlVO> updateList = BatchUtils.to(DefaultUrlVO.class).getModifiedEntities(dataListsMap);
        if (updateList != null && updateList.size() > 0) {
            for (DefaultUrlVO vo : updateList) {
                DefaultUrl entity = convertDefaultUrlVOTo(vo);
                defaultUrlDao.update(entity);
            }
//			defaultUrlDao.updateAll(updateList);
        }
        if (insertList != null && insertList.size() > 0) {
            for (DefaultUrlVO vo : insertList) {
                DefaultUrl entity = convertDefaultUrlVOTo(vo);
                defaultUrlDao.save(entity);
                vo.setId(entity.getId());
            }
//			defaultUrlDao.saveAll(insertList);
        }
        if (deleteList != null && deleteList.size() > 0) {
            for (DefaultUrlVO vo : deleteList) {
                DefaultUrl entity = new DefaultUrl();
                entity.setId(vo.getId());
                defaultUrlDao.remove(entity);
            }
//			defaultUrlDao.removeAll(deleteList);
        }

    }
}

